package fr.leava.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import fr.leava.R;
import fr.leava.domain.RSSFeed;
import fr.leava.domain.RSSItem;
import fr.leava.domain.RSSReader;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

public class VideoListActivity extends Activity {
    public static final Logger LOGGER = Logger.getLogger(VideoListActivity.class.getName());

    private RSSFeed RSSFeed;
    private ListView listView;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_view);

//        if (5 == 3 + 2) return;

        //Récupération de la listview créée dans le fichier main.xml
        listView = (ListView) findViewById(R.id.listviewperso);

        //Création de la ArrayList qui nous permettra de remplir la listView
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();

        //On déclare la HashMap qui contiendra les informations pour un item
        HashMap<String, Object> map;

        RSSFeed = new RSSFeed();
        try {
            RSSFeed.title = "firstFeed";
//            RSSFeed.url = new URL("http://www.leava.fr/rss/cours-torah-judaisme/pensee-juive.xml");
        } catch (Exception e) {
            AlertDialog.Builder adb = new AlertDialog.Builder(VideoListActivity.this);
            adb.setTitle("erreur!!!");
            e.printStackTrace();
        }
        final RSSReader rssReader = new RSSReader();
        final RSSFeed rssFeed;
        rssFeed = rssReader.parse("http://www.leava.fr/rss/cours-torah-judaisme/techouva.xml"); // TODO
//        rssFeed = rssReader.parse("http://www.leava.fr/rss/cours-torah-judaisme/pensee-juive.xml"); // TODO

        for (RSSItem rssItem : rssFeed.getRssItems()) {
            map = new HashMap<String, Object>(3);
            final ImageView imageView = new ImageView(this.getBaseContext());
            try {
                String url = rssItem.getRssEnclosure().getUrl();
                Drawable image = createDrawableFromURL(url);
                imageView.setImageDrawable(image);
            } catch (Exception ex) {
                ex.printStackTrace();
            }

            imageView.setMinimumWidth(16);
            imageView.setMinimumHeight(16);

            imageView.setMaxWidth(16);
            imageView.setMaxHeight(16);


            map.put("titre", rssItem.title);
            map.put("description", rssItem.getPubDate());
            map.put("img", imageView);
//            map.put("img", String.valueOf(R.drawable.leava)); // TODO
            listItem.add(map);
        }

        for (int i = 0; i < 5; i++) {
            map = new HashMap<String, Object>(3);
            map.put("titre", "title#" + i);
            map.put("description", "description#" + i);
            map.put("img", String.valueOf(R.drawable.leava));
            listItem.add(map);
        }

        //Création d'un SimpleAdapter qui se chargera de mettre les items présents dans notre list (listItem) dans la vue affichageitem
        SimpleAdapter simpleAdapter = new SimpleAdapter(this.getBaseContext(), listItem, R.layout.affichageitem,
                new String[]{"img", "titre", "description"}, new int[]{R.id.img, R.id.titre, R.id.description});

        //On attribue à notre listView l'adapter que l'on vient de créer
        listView.setAdapter(simpleAdapter);

        //Enfin on met un écouteur d'évènement sur notre listView
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            @SuppressWarnings("unchecked")
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                //on récupère la HashMap contenant les infos de notre item (titre, description, img)
                HashMap<String, String> map = (HashMap<String, String>) listView.getItemAtPosition(position);
                //on créé une boite de dialogue
                AlertDialog.Builder adb = new AlertDialog.Builder(VideoListActivity.this);
                //on attribue un titre à notre boite de dialogue
                adb.setTitle("Sélection Item");
                //on insère un message à notre boite de dialogue, et ici on affiche le titre de l'item cliqué
                adb.setMessage("Votre choix : " + map.get("titre"));
                //on indique que l'on veut le bouton ok à notre boite de dialogue
                adb.setPositiveButton("Ok", null);
                //on affiche la boite de dialogue
                adb.show();
            }
        });
    }

    public Object fetch(String address) throws MalformedURLException,
            IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }

    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (MalformedURLException e) {
            LOGGER.log(Level.WARNING, e.getMessage());
            return null;
        } catch (IOException e) {
            LOGGER.log(Level.WARNING, e.getMessage());
            return null;
        }
    }

    private Drawable createDrawableFromURL(String urlString) {
        Drawable image = null;
        try {
            URL url = new URL(urlString);
            InputStream is = (InputStream) url.getContent();
            image = Drawable.createFromStream(is, "src");
        } catch (MalformedURLException e) {
            // handle URL exception
            image = null;
        } catch (IOException e) {
            // handle InputStream exception
            image = null;
        }

        return image;
    }

}

